package com.miracle.toolbox.file;

import java.io.File;
import java.io.IOException;


public class FileUtils {

    public static final String IS_FILE = "0";
    public static final String IS_DIRECTORY = "1";

    public static void main(String[] args) {
        String path = "F:\\tmp\\发版\\tt\\ss\\aa.txt";
        getFileWithCreate(path, IS_FILE);
    }

    /**
     * 根据路径创建目标文件并返回文件对象，必要但不存在的父目录会创建
     * *需要指定目标是文件或目录（0 文件，1 目录），如过不指定视为文件
     * *
     * @param path 绝对路径
     * @param fileOrDirectory 目标是文件或目录（0 文件，1 目录）
     * @return
     */
    public static File getFileWithCreate(String path, String fileOrDirectory){

        File file = new File(path);
        if (IS_FILE.equals(fileOrDirectory)){
            System.out.println("目标文件是文件");
            if (!file.exists()){
                System.out.println("目标文件不存在，开始校验父目录");
                if (!file.getParentFile().exists()){
                    file.getParentFile().mkdirs();
                    System.out.println("目标文件父目录不存在，父目录创建成功");
                }else {
                    System.out.println("目标文件父目录已存在");
                }
                try {
                    file.createNewFile();
                    System.out.println("目标文件创建成功");
                } catch (IOException e) {
                    throw new RuntimeException("目标文件创建失败",e);
                }
            }else{
                if (!file.isFile()){
                    throw new RuntimeException("已存在同名目录，文件创建失败");
                }else {
                    System.out.println("目标文件已存在");
                }
            }

        }else if (IS_DIRECTORY.equals(fileOrDirectory)){
            System.out.println("目标文件是目录");
            if (!file.exists()){
                file.mkdirs();
                System.out.println("目标目录不存在，目录创建成功");
            }else {
                if (!file.isDirectory()){
                    throw new RuntimeException("已存在同名文件，目录创建失败");
                }else {
                    System.out.println("目标目录已存在");
                }
            }
        }else {
            getFileWithCreate(path, FileUtils.IS_FILE);
        }
        return file;
    }


}
